package DataStructureAndAlgorithm.Tedukuri.前缀和与差分;
import java.util.Scanner;
//二维前缀和
public class AcWing_99 {
    public static void main(String[] args){
        Scanner in = new Scanner(System.in);
        int N = 5010;
        int length = 5001;
        int n = in.nextInt();
        int R = in.nextInt();
        //当R大于地图时，所得的价值直接是pre[length][length]
        R = Math.min(R,length);
        int[][] react = new int[N][N];
        int[][] pre = new int[N][N];
        for (int i = 1; i <= n; i++){
            int x = in.nextInt();
            int y = in.nextInt();
            //不同目标可能在同一位置
            react[x + 1][y + 1] += in.nextInt();
        }
        //预处理前缀和
        for (int i = 1; i <= length; i++){
            for (int j = 1; j <= length; j++){
                pre[i][j] = pre[i - 1][j] + pre[i][j - 1] - pre[i - 1][j - 1] + react[i][j];
            }
        }
        //以R为边长求解
        int res = 0;
        for (int i = R; i <= length; i++){
            for (int j = R; j <= length; j++){
                res = Math.max(res,pre[i][j] - pre[i - R][j] - pre[i][j - R] + pre[i - R][j - R]);
            }
        }

        System.out.print(res);
    }
}
/*
地图上有 N 个目标，用整数 Xi,Yi 表示目标在地图上的位置，每个目标都有一个价值 Wi

。

注意：不同目标可能在同一位置。

现在有一种新型的激光炸弹，可以摧毁一个包含 R×R

个位置的正方形内的所有目标。

激光炸弹的投放是通过卫星定位的，但其有一个缺点，就是其爆炸范围，即那个正方形的边必须和 x，y

轴平行。

求一颗炸弹最多能炸掉地图上总价值为多少的目标。
输入格式

第一行输入正整数 N
和 R

，分别代表地图上的目标数目和正方形的边长，数据用空格隔开。

接下来 N
行，每行输入一组数据，每组数据包括三个整数 Xi,Yi,Wi，分别代表目标的 x 坐标，y

坐标和价值，数据用空格隔开。
输出格式

输出一个正整数，代表一颗炸弹最多能炸掉地图上目标的总价值数目。
数据范围

0≤R≤109

0<N≤10000,
0≤Xi,Yi≤5000
0≤Wi≤1000

输入样例：

2 1
0 0 1
1 1 1

输出样例：

1

 */